package com.nts.pmchelperdemo3.service;

import com.nts.pmchelperdemo3.dto.MachineLoadDTO;
import com.nts.pmchelperdemo3.entity.Machine;

import java.time.LocalDateTime;
import java.util.List;

public interface MachineService {
    /**
     * 查询所有机器（支持按类型筛选）
     * @param machineType 机器类型（0-磨刀机，1-涂层机，可选）
     * @return 机器负载DTO列表（含名称、类型、截止日期等）
     */
    List<MachineLoadDTO> getAllMachines(Integer machineType);

    /**
     * 查询单台机器的当前排班截止日期
     * @param machineName 机器名称（如sharpen1、coat2）
     * @return 机器负载DTO（含截止日期）
     */
    MachineLoadDTO getMachineDeadline(String machineName);

    /**
     * 按类型查询机器负载统计
     * @return 机器负载DTO列表（按类型分组）
     */
    List<MachineLoadDTO> getMachineLoadByType();

    /**
     * 根据类型获取可用机器（用于排班分配）
     * @param machineType 机器类型（0-磨刀机，1-涂层机）
     * @return 机器实体列表
     */
    List<Machine> getAvailableMachinesByType(Integer machineType);

    /**
     * 更新机器的当前排班截止日期
     * @param machineId 机器ID
     * @param newEndTime 新的截止日期
     */
    void updateMachineDeadline(Long machineId, String newEndTime);

    /**
     * 获取可用机器数
     * @return count 可用机器数
     */
    int countAvailableMachine();

    /**
     * 重设机器的最晚工作时间
     * @param machineId
     * @param taskEndTime
     */
    void resetMachineDeadlineIfNeeded(Long machineId, LocalDateTime taskEndTime);

    /**
     * 根据倒序的排班计划获取机器截止日期
     * @param machineId
     * @return
     */
    LocalDateTime regetTaskEndTime(Long machineId);
}
